package Server;

/*
 * File:    VallaSecundariaLabel.java
 * Coms:    Getiona los labels de esta valla.
 * Si hay imagen pendiente de para mostrar, muestra la suya. durante el tiempo acordado por el cliente
 * Si no hay imagenes encoladas, se duerme, a la espera de que llegan nuevas imagenes
 * 		   
 */

/**
 * @author Daniel Cabrera Ebana
 * @author Alberto Sanchez Romero - 662385
 * @since 
 */
import java.awt.Container;
import java.awt.Image;
import java.io.File;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;

public class VallaPrincipalLabel implements Runnable {

	private static File path;
	private static JFrame frame;
	private static Container content;
	private static JLabel label1;
	private Border border;
	private GestorRecursos gestor;
	private ImageIcon banner;

	/**
	 * Constructor del label de la valla principal
	 * 
	 * @param GestorRecursos
	 * @param File
	 * @param JFrame
	 * @param Container
	 * 
	 * 
	 * @see VallaPrincipal.java
	 * 
	 */
	public VallaPrincipalLabel(GestorRecursos gr, File dir, JFrame f,
			Container c) {
		VallaPrincipalLabel.path = dir;
		VallaPrincipalLabel.frame = f;
		border = LineBorder.createGrayLineBorder();
		content = c;
		gestor = gr;

		// se coge la imagen del path que
		banner = new ImageIcon(path + System.getProperty("file.separator")
				+ "espacioDisponible.jpg");

		// construir el y añadirlo
		label1 = new JLabel(banner);
		label1.setHorizontalTextPosition(JLabel.LEFT);
		label1.setVerticalTextPosition(JLabel.BOTTOM);
		label1.setBorder(border);
		content.add(label1);

	}

	public void run() {

		// System.out.println("label arrancado ");
		boolean colocada = false;

		String nombreTiempo = "";
		String nombreImg = "";
		int tiempo = 0;

		// int sizeValla1 = 0;

		while (true) {

			// si no hay imgaenes y lo ultimo colocado es una imagen, ponemos el
			// banner

			if (gestor.getsize(1) == 0 && colocada) {

				System.out.println("BAnner....");
				updateLabelValla(banner);
				colocada = false;
			}

			// El monitorLabel1 gestiona si el Thread debe dormirse o tiene
			// trabajo para realizar
			gestor.getMonitorL1().getElem();// comprovamos si hay elementos
			if (gestor.getsize(1) > 0) {
				// Solo trabaja en caso de que haya algo en la cola
				nombreTiempo = gestor.getImg(1);
				nombreImg = nombreTiempo.substring(0,
						nombreTiempo.lastIndexOf(','));
				tiempo = Integer.parseInt((nombreTiempo.substring(nombreTiempo
						.lastIndexOf(',') + 1)));

				updateLabelValla(getImg(nombreImg));
				colocada = true;
				gestor.setAddSegundos(1, tiempo);// hay un delay
				// Se queda dormido el tiempo que la imagen tiene que ser
				// mostrada
				sleepy(tiempo);
				// indicamos que la imagen en la valla se va
				gestor.setMinusImgEnValla(1);

			}

		}

	}

	/**
	 * Actualiza el contenido del Label con la imagen que se le pasa
	 * 
	 * @param ImageIcon
	 * 
	 */
	private static void updateLabelValla(ImageIcon img) {

		content.remove(label1);
		System.out.println("Actualizando imagen valla 1....");
		label1.setIcon(img);
		content.add(label1);
		frame.repaint();
	}

	/**
	 * Duerme el proceso durante el tiempo indicado en segundos
	 * 
	 * @param seconds
	 * 
	 */
	private static void sleepy(int seconds) {

		try {
			Thread.sleep(seconds * 1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

	}

	/**
	 * Escala la imagen
	 * 
	 * @param nameImg
	 * @return ImageIcon
	 */
	private static ImageIcon getImg(String nameImg) {

		ImageIcon image = new ImageIcon(path
				+ System.getProperty("file.separator") + nameImg);
		Image imagescale = image.getImage();
		Image newimg = imagescale.getScaledInstance(500, 500,
				java.awt.Image.SCALE_SMOOTH);
		ImageIcon imgfinal = new ImageIcon(newimg);

		return imgfinal;
	}

}
